1. Background and Relevant Art
Computer systems and related technology affect many aspects of daily life in society. Indeed, the computer system's ability to process information has transformed the way we live and work. Computer systems now commonly perform a host of tasks (e.g., word processing, scheduling, accounting, etc.) that prior to the advent of the computer system were performed manually. More recently, computer systems have been coupled to one another and to other electronic devices to form both wired and wireless computer networks over which the computer systems and other electronic devices can transfer electronic data. Accordingly, the performance of many computing tasks are distributed across a number of different computer systems and/or a number of different computing components.
In many environments, a computer system typically includes a Central Processing Unit (“CPU”), system memory (e.g., Random Access Memory (“RAM”), some type of mass storage device (e.g., magnetic disk), input devices, and output devices. Input devices are used to accept user input to the computer system and relay that user input to the CPU. Output devices are used to present CPU output to the user. Thus, a user typically uses input devices to input data into a computer system, the input devices relay the input data to the CPU, the CPU processes the input data to generate corresponding output data (e.g., through system or application programs), the CPU sends the output data to the output devices, and the output devices present the output data.
Both input and output devices can include a combination of hardware (physical objects) and software (e.g., device drivers, user-interface controls) to implement their desired functionality. Specific to input devices, hardware devices, such as, for example, keyboards, mice, joysticks, etc., are used to receive input data. These or other hardware devices can be used to manipulate and navigate to user-interface controls (e.g., buttons, menus, etc) that have specified input functions. For example, a user can manipulate a mouse to move a cursor over a “print” button and click a mouse button to cause a document to print.
More recently, computer display devices have been configured to function both as an input device and a video output device. For example, computer display devices can be configured with touch surface mechanisms that facilitate the entry of input data through a display surface. Sensors (e.g., pressure sensors) embedded in the display surface can detect when objects (e.g., fingers) contact a particular location on the display surface. A computer system can then perform some action in response to detecting the contact. For example, in response to detecting contact between an object and a display surface at a location corresponding to user-interface control, a computer system can perform some action associated with the user-interface control.
Accordingly, input devices advantageously permit a user to meaningfully interact with a computer system. In many public and semi-public environments (e.g., libraries, restaurants, private clubs, airline courtesy rooms, etc.), computer systems (e.g., kiosks, table top computer systems, etc.) are made available to large numbers of users. Within these environments, it is often desirable to permit multiple users to use the same computer simultaneously to conserve space, computer system resources, etc. It is also often desirable to allow any simultaneous users to work collaboratively together or to work separately based on individual user needs or to work collaboratively together. For example, it may be desirable to allow multiple users to work collaboratively together on a presentation. On the other hand, it may also be desirable to allow a first user to browser the Internet, while a second user edits a word processing document.
Unfortunately, existing input device technologies have at least a few drawbacks when attempting to provide multi-user access (either collaboratively or individually) to the same computer system. For hardware devices, at least one device per user must typically be provided. For example, for multiple users to simultaneously perform different computing tasks, each user may require a separate keyboard and mouse. Thus, even though multiple computer systems are not utilized, there typically must be sufficient workspace to co-locate multiple sets of input devices per computer system.
For software, each instance of a user-interface control can consume a portion of a display surface. Further, multiple sets of user-interface controls must be displayed to provide corresponding multiple users with simultaneous computer access. Depending on the display area of the display surface, the number of presented sets of user-interface controls, and the number of supported users, existing display area can be crowded and potentially of limited use. Further, user-interface controls (e.g., a button) typically have a single (or “right-side up”) orientation. Thus, when multiple users are working collaboratively, user-interface controls are properly oriented only for one of the multiple users. User-interface controls are also typically optimized for large finger sizes causing them to consume more display areas than may be needed for many users.
In some environments, motion based gesture recognition can be used in combination with a touch surface to receive input data. Software modules within a computer system can recognize motion based gestures made on the touch surface. For example, the software modules can track a user's finger(s) in constant contact with the touch surface as the user's finger(s) makes an arc, draws an outline, etc., When the user's finger(s) are no longer detected on the touch surface, the software modules can process the contact path to recognize a corresponding motion based gesture. Motion based gestures can correspond to pre-determined input functions. Thus, when the software modules detect a motion based gesture, the corresponding input function is performed in response to the motion based gesture. Accordingly, motion based gestures, at least to some extent, can alleviate the need for per user hardware input devices and can reduce the size of per user sets of user-interface controls.
However, recognition of motion based gestures is relatively complex. As a result, the motion tracking, coordinate buffering, algorithmic processing, etc. required to recognize a single motion based gesture can consume significant computer system resources (e.g., CPU cycles, system memory). Thus, attempting to recognize motion based gestures for multiple users (working either collaboratively or individually) at a single computer system can (potentially significantly) degrade system performance. For example, motion based gesture recognition, as well as other processes at the computer system, can take longer to complete due to limited resource availability.